#!/bin/bash 
# 设置命令标题名称
echo -ne "\e]2;银河麒麟V10Sp1工具箱\a"

# 确保脚本在终端中运行
if [ -z "$TERM" ]; then
    # 如果没有终端，尝试启动一个终端来运行脚本
    x-terminal-emulator -e "$0"
    exit 0
fi

# 颜色定义
red='\033[0;31m' 
green='\033[0;32m' 
yellow='\033[0;33m'
blue='\033[0;34m' 
cyan='\033[0;36m'
magenta='\033[0;35m' 
reset='\033[0m'
nc='\033[0m'

# 优化图标路径检查
icon_path="/usr/share/icons/hicolor/48x48/apps/xq-kylin-tools.png"
[[ ! -f "$icon_path" ]] && icon_path=""  # 图标不存在时不显示

# ====================== 通知工具函数 ======================
# 桌面通知与终端提示函数
show_notification() { 
    local title="$1" message="$2" level="$3" icon="${4:-}"
    case "$level" in
        "success") color="$green"; urgency="normal" ;;
        "warning") color="$yellow"; urgency="normal" ;;
        "error")   color="$red"; urgency="critical" ;;
        *)         color="$nc"; urgency="normal" ;;
    esac
    echo -e "\n${color}【$title】${message}${NC}"
    # 发送桌面通知
    if command -v notify-send &> /dev/null; then
        if [[ -n "$icon" && -f "$icon" ]]; then
            notify-send -u "$urgency" -i "$icon" "$title" "$message" 2>/dev/null || true
        else
            notify-send -u "$urgency" "$title" "$message" 2>/dev/null || true
        fi
    fi
}

# ====================== 权限检查与获取函数 ======================
# 错误处理函数 - 防止闪退并提示用户
handle_error() {
    local message="$1"
    echo -e "\n${red}【错误】${message}${NC}"
    show_notification "操作失败" "${message}" "error" "$icon_path"
    read -p "按Enter键继续或关闭窗口..."  # 防止闪退，等待用户确认
}
echo -e "${blue}▶ 正在验证sudo权限，请输入您的密码...${NC}"

if sudo -v; then
    echo -e "\n${green}【成功】sudo权限验证通过，继续执行后续操作${NC}"
else
    echo -e "\n${red}【错误】sudo权限验证失败！原因可能是：${NC}" 
    echo -e "${yellow}1. 当前用户未配置sudo权限"
    echo -e "2. 密码输入错误"
    exit 1
fi

# 用户确认函数：提示用户确认操作（y/n），返回 0（确认）或 1（取消）
confirm_operation() {
    echo -en "${yellow}$1 (y/n): ${reset}"
    read -r response
    [[ "$response" =~ ^[Yy]$ ]] && return 0 || return 1  
}

# ====================== 1）显示设置功能开始 ======================
# 显示设置菜单：处理显示相关配置
display_menu() {
    while true; do
        clear
         echo -e "${blue}======================  银河麒麟工具箱  =====================${reset}"
         echo -e "${green}╔══════════════════════════════════════════════════════════╗"
        echo -e "║                           显示设置                       ║"
        echo -e "╚══════════════════════════════════════════════════════════╝${reset}"            
        echo -e " ${magenta}1)${reset} 多屏显示修复               ${magenta}2)${reset} 分辨率自动修复"
        echo -e " ${magenta}3)${reset} 触屏映射修复               ${magenta}4)${reset} 亮度调节修复"
        echo -e " ${magenta}5)${reset} 字体安装修复"
        echo -e " ${red}0)${reset} 返回主菜单"

        echo -e "${blue}$(printf '═%.0s' $(seq 1 60))${reset}"
        echo -en "${yellow}请输入选项编号 [ 例如：1 ]: ${reset}"
        read -rp "" choice
        case $choice in
            1) fix_multi_screen; echo -e "\n${yellow}按Enter键继续...${reset}"; read -r ;;
            2) fix_screen_resolution; echo -e "\n${yellow}按Enter键继续...${reset}"; read -r ;;
            3) fix_touchscreen_mapping; echo -e "\n${yellow}按Enter键继续...${reset}"; read -r ;;
            4) fix_brightness_control; echo -e "\n${yellow}按Enter键继续...${reset}"; read -r ;;
            5) fix_font_installation; echo -e "\n${yellow}按Enter键继续...${reset}"; read -r ;;
            0) echo -e "${green}→ 正在返回主菜单...${reset}";  break ;;
            *) echo -e "${red}✗ 无效选择，请重新输入！${reset}"; sleep 0.5;;
        esac
        echo -e "\n${yellow}按Enter键继续...${reset}"
        read -r
    done
}

# 多屏显示问题修复：支持扩展/镜像/关闭副屏/重置配置
fix_multi_screen() {
    echo -e "${cyan}>>> 多屏显示问题修复${reset}"
    # 检测显示器接口
    echo -e "${yellow}正在检测显示器接口...${reset}"
     interfaces=$(xrandr -q | grep " connected" | awk '{print $1}')
    # 无活动显示器时退出
    if [ -z "$interfaces" ]; then
        echo -e "${red}✗ 未检测到活动显示器！${reset}"
        return 1  
    fi
    # 显示检测结果
    echo -e "${green}✓ 检测到显示器接口: ${interfaces}${reset}"
    # 多屏模式选择
    echo -e "\n${cyan}请选择多屏模式：${reset}"
    echo "1) 扩展模式 (双屏拼接)"
    echo "2) 镜像模式 (双屏复制)"
    echo "3) 关闭副屏"
    echo "4) 重置显示器配置"
    read -rp "输入选项: " mode
    case $mode in
        1)  # 扩展模式：副屏在主屏右侧
            primary=$(echo "$interfaces" | head -1)
            secondary=$(echo "$interfaces" | tail -1)
            xrandr --output "$primary" --auto --primary --output "$secondary" --auto --right-of "$primary"
            # 终端消息（带颜色）、通知消息（纯文本）分离
               local terminal_msg="${green}✓ 已启用扩展模式${reset}"
               echo -e "$terminal_msg"  # 终端输出带颜色
            ;;
        2)  # 镜像模式：所有屏幕同步显示
            primary=$(echo "$interfaces" | head -1)
            xrandr --output "$primary" --auto --primary $(printf -- '--output %s --same-as %s ' ${interfaces[@]})
            echo -e "${green}[通知] 已启用镜像模式${reset}"
            ;;
        3) # 关闭副屏
            secondary=$(echo "$interfaces" | tail -1)
            xrandr --output "$secondary" --off
            echo -e "${green}[通知] 已关闭副屏${reset}"
            ;;
        4)  # 重置显示器配置
            xrandr --auto
            echo -e "${green}[通知] 已重置显示设置${reset}"
            ;;
        *)  # 无效选择
            echo -e "${red}无效选择！${reset}"
            sleep 0.5
            ;;
    esac
    # 持久化配置：保存到启动脚本，重启生效
    if confirm_operation "是否保存配置到启动脚本？"; then
        config_file="/etc/X11/Xsession.d/45_fix_kylin_display"
        echo "#!/bin/bash" | sudo tee "$config_file" >/dev/null
        echo "xrandr --auto" | sudo tee -a "$config_file" >/dev/null
        for iface in $interfaces; do
            echo "xrandr --output $iface --auto" | sudo tee -a "$config_file" >/dev/null
        done
        sudo chmod +x "$config_file" 
        echo -e "${green}[通知] 配置已保存，重启后生效${reset}"
    fi
}

# 分辨率自动修复
fix_screen_resolution() {
    echo -e "${cyan}>>> 分辨率自动修复${reset}"
    # 安装必要工具（xrandr）
    if ! command -v xrandr &> /dev/null; then
        echo -e "${yellow}正在安装x11-xserver-utils...${reset}"
        sudo apt install -y x11-xserver-utils || {
            echo -e "${red}✗ 安装失败！${reset}"
            return 1
        }
    fi
    # 获取活动显示器
    active_display=$(xrandr | grep " connected" | awk '{print $1}' | head -1)
    if [ -z "$active_display" ]; then
        echo -e "${red}✗ 未检测到活动显示器！${reset}"
        return 1
    fi
    # 自动检测最佳分辨率（优先选择带*标记的默认分辨率）
    optimal_res=$(xrandr | grep -oP '\d+x\d+\s+\d+\.\d+\*' | head -1 | awk '{print $1}')
    if [ -z "$optimal_res" ]; then
        optimal_res="1920x1080"  # 无检测结果时使用默认分辨率
        echo -e "${yellow}[通知] ⚠ 使用默认分辨率: 1920x1080${reset}"
    fi
    # 主动测试分辨率（替代5秒等待）
    echo -e "${yellow}正在测试分辨率: $optimal_res${reset}"
    original_res=$(xrandr | grep -oP '\d+x\d+\s+\d+\.\d+\*' | head -1 | awk '{print $1}')
    # 应用测试分辨率
    xrandr --output "$active_display" --mode "$optimal_res" || {
        echo -e "${red}✗ 测试分辨率失败，保留原始分辨率${reset}"
        return 1
    }
    # 即时询问用户是否保留
    if confirm_operation "是否保留此分辨率？(y=保留/n=恢复)"; then
        # 创建新模式并应用
        modeline=$(cvt ${optimal_res/x/ } 60 | sed -n 's/Modeline //p') 
        mode_name=$(echo "$modeline" | awk '{print $1}')
        xrandr --newmode $modeline
        xrandr --addmode "$active_display" "$mode_name"
        xrandr --output "$active_display" --mode "$mode_name"
        # 持久化配置
        config_file="/etc/X11/Xsession.d/46_fix_kylin_resolution"
        echo "#!/bin/bash" | sudo tee "$config_file" > /dev/null
        echo "xrandr --newmode '$modeline'" | sudo tee -a "$config_file" > /dev/null
        echo "xrandr --addmode '$active_display' '$mode_name'" | sudo tee -a "$config_file" > /dev/null
        echo "xrandr --output '$active_display' --mode '$mode_name'" | sudo tee -a "$config_file" > /dev/null
        sudo chmod +x "$config_file"
        echo -e "${green}[通知] 分辨率已修复并持久化${reset}"
    else
        # 恢复原始分辨率
        xrandr --output "$active_display" --mode "$original_res"
        echo -e "${yellow}[通知] 已恢复原始分辨率${reset}"
    fi
}

# 多显示器触屏映射修复：将触屏设备绑定到指定显示器
fix_touchscreen_mapping() {
    echo -e "${cyan}>>> 多显示器触屏映射修复${reset}"
    # 显示触屏设备列表
    echo -e "${yellow}检测到的触屏设备：${reset}"
    xinput | grep -i touch
    # 选择触屏设备
    read -rp "输入要映射的触屏设备名称: " touch_device
    # 显示可用显示器
    echo -e "${yellow}可用显示器接口：${reset}"
    xrandr | grep " connected"  
    # 选择目标显示器
    read -rp "输入目标显示器接口: " target_display
    # 执行映射
    xinput map-to-output "$touch_device" "$target_display"
    echo -e "${green}✓ 触屏映射完成${reset}"
    # 持久化配置
    if confirm_operation "是否保存配置到启动脚本？"; then
        config_file="/etc/X11/Xsession.d/47_fix_kylin_touchscreen"
        echo "#!/bin/bash" | sudo tee "$config_file" >/dev/null
        echo "xinput map-to-output \"$touch_device\" \"$target_display\"" | sudo tee -a "$config_file" >/dev/null
        sudo chmod +x "$config_file"
        echo -e "${green}[通知] 持久化配置，配置已保存，重启后生效${reset}"
    fi
}

# 亮度调节修复：配置Intel显卡背光驱动
fix_brightness_control() {
    echo -e "${cyan}>>> 亮度调节修复${reset}"
    sudo tee /etc/X11/xorg.conf.d/20-intel.conf <<EOF
Section "Device"
    Identifier  "Intel Graphics"
    Driver      "intel"
    Option      "Backlight"  "intel_backlight"
EndSection
EOF
    echo -e "${green}[通知] 亮度调节功能已修复，请重启系统${reset}"
}

# 字体安装修复：从用户Fonts目录安装字体到系统
fix_font_installation() {
    if [ -d ~/Fonts ]; then
        sudo cp ~/Fonts/*.{ttf,TTF,otf,OTF}  /usr/share/fonts/kylin/ 2>/dev/null
        sudo fc-cache -f -v
        echo -e "${green}已安装用户字体${reset}"
    else
        echo -e "${yellow}未找到 ~/Fonts 目录，请把您要增加的字体先放到 ~/Fonts/目录下 ${reset}"
    fi
}
# 执行主函数 
display_menu

# 添加循环保护，防止意外退出
if [ $? -ne 0 ]; then
    echo -e "${red}菜单执行出错，3秒后返回主菜单...${reset}"
    sleep 3
fi